作者:LogM
本文原载于 https://segmentfault.com/u/logm/articles ,不允许转载~
1. 概述
TextRank 论文地址:https://www.aclweb.org/anthology/W04-3252
上一篇博客 TextRank C++ 版本 提到,两位大佬的代码还有改进空间,所以我自己也实现了一个版本。
2. 致谢
首先要非常感谢3位大佬,我的代码是借鉴了他们3人的代码实现的。
主要借鉴的点:letiantian 对中文的处理;comoody 对图的构建;lostfish 对 PageRank 的实现。
letiantian: https://github.com/letiantian/TextRank4ZH.git
comoody: https://github.com/comoody/TextRank.git
lostfish: https://github.com/lostfish/textrank.git
3. 我自己的实现
Github地址:https://github.com/imLogM/TextRank_Cpp.git
原本我是给自己定的以下几个目标:
a. 遵循原论文思路;
b. 代码简洁;
c. 优化计算速度;
d. 考虑异常输入。
后来我发现,要 b、c、d 兼得真的好难。为了加速计算速度,用空间换时间,把一些计算中间值单拎了出来,代码简洁度--。为了应对用户各种奇葩的输入,写了很多判断语句,代码简洁度--。
还是,就是为了兼容旧的编译器,range-based for loop
和 匿名函数
是肯定不能用的,代码简洁度--。
4. 注意事项
代码里面会有 xxxx::toLowerCase()
和 xxxx::split()
这两个奇怪的函数。这是因为我自己实现的时候用的特殊的字符串处理库,你们使用时需要自己找库来替换,当然,这两个函数自己写貌似也没特别大的难度。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。